﻿#define  _CRT_SECURE_NO_WARNINGS 1



//假如整型指针p已经指向某个整型变量x，则(*p)++和下面哪一个等价？
//A
//p++
//B
//x++
//C
//* (p++)
//D
//& x++

	

//
//2.
//对于公式
//y = \begin{ cases } 1, &x \gt 0 \\ 0, & x = 0 \\ - 1, & x \lt 0 \end{ cases }y =
//⎩
//⎪
//⎨
//⎪
//⎧
//​
//
//1,
//0,
//−1,
//​
//
//x > 0
//x = 0
//x < 0
//	​
//
//	对应的语下面错误的是（）
//A
//	if (x > 0) y = 1;  else if (x == 0) y = 0;  else y = -1;
//B
//y = 0;  if (x > 0) y = 1;  else if (x < 0) y = -1;
//C
//y = 0;  if (x >= 0)  if (x > 0)y = 1   else y = -1;
//D
//if (x >= 0)  if (x > 0) y = 1;  else y = 0; else y = -1;
////
//
//
//
//
//#include<stdio.h>
//
//void add(int* p) 
//{
//    (*p)++;
//    printf("%d", *p);
//    if (*p > 5) 
//    {
//        return;
//    }
//    add(p);
//}
//
//int main()
//{
//    int i = 0;
//    add(&i);
//    return 0;
//}
//A
//12345
//B
//123456
//C
//111111
//D
//未知



//单选题
//1.
//对于链表的优缺点，以下说法错误的是（    ）
//A
//预先未知表中元素的多少时宜采用链表
//B
//可以方便的随机存取表中的任何一节点
//C
//插入和删除操作较方便
//D
//无需采用连续的存储空间进行数据存储




//线性表的链式存储结构既方便其存取操作，也方便其插入与删除操作，这种说法（）
//A
//正确
//B
//错误






                          /* q  p
某单链表有5个元素，设单链表的节点结构为(data, next)，
5个元素的data依次为（1、2、3、4、5），已知指针q指向节点3，指针p指向节点4，
那么下面操作能将链表变为data依次为（1、2、3、5）的是____。（
其中temp为节点类型指针，默认指向NULL）
A
q = p->next;
B
p = q->next;
C
p->next = q->next;
D
q->next = p->next; delete q;
E      1 2 3 5 5
p->data = p->next->data; p->next = p->next->next; delete p->next;
F
temp = p->next; p->next = temp->next;
p->data = temp->data; delete temp; temp = NULL;*/

//
//某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,
//则采用（）存储方式最节省运算时间。
//A
//单链表
//B
//仅有头指针的单循环链表
//C
//双链表
//D
//仅有尾指针的单循环链表




//
//
//正确答案：F
//你的答案：E
//参考答案：这个题最大的问题就是E, F选项
//，E选项因为p->next = p->next->next; , 所以指向了一个p->next一个不确定的空间，
//而第5个节点又没有释放，会导致内存泄露，F选项temp是一个确定的空间，
//不会出现什么问题
//知识点：链表
//

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
//#include<stdio.h>
//struct ListNode* middlenode(struct ListNode* head)
//{
//    struct ListNode* fast = head;
//    struct ListNode* slow = head;
//    while (fast && fast->next)
//    {
//        fast = fast->next->next;
//        slow = slow->next;
//    }
//    return slow;
//}
//struct ListNode* reverselist(struct ListNode* head)
//{
//    struct ListNode* n1 = NULL;
//    struct ListNode* n2 = head;
//    while (n2)
//    {
//        struct ListNode* n3 = n2->next;
//        n2->next = n1;
//        n2 = n3;
//        n1 = n2;
//    }
//    return n1;
//}
//bool isPail(struct ListNode* head)
//{
//    struct ListNode* mid = middlenode(head);
//    struct ListNode* rmid = reverselist(mid);
//    while (rmid)
//    {
//        if (head->val != rmid->val)
//            return false;
//        head = head->next;
//        rmid = rmid->next;
//    }
//
//    return true;
//}
//
//int main()
//{
//    struct ListNode* plist = NULL;
//    isPail(plist);
//}





//#include<stdio.h>
//int main()
//{
//	int a = 3;
//	while (--a)
//	{
//		printf("haha\n");
//	
//	}
//
//	return 0;
//}





/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */

//struct ListNode* reverseBetween(struct ListNode* head, int m, int n)
//{
//    struct ListNode* p = head;
//    struct ListNode* head1 = (struct ListNode*)malloc(sizeof(struct ListNode));
//    head1->next = head;
//    struct ListNode* pre = head1;
//    for (int j = 1; j < m; j++)
//    {
//        p = p->next;
//        pre = pre->next;
//    }//p指向要调换的第一个结点
//    for (int j = 0; j < n - m; j++)
//    {
//        struct  ListNode* r = p->next;
//        p->next = r->next;
//        r->next = pre->next;
//        pre->next = r;
//    }//反转完成
//    return head1->next;
//}
//










